/*
Generator 函数返回的遍历器对象，还有一个return()方法，
可以返回给定的值，并且终结遍历 Generator 函数。

遍历器对象g调用return()方法后，返回值的value属性就是return()方法的参数foo。
并且，Generator 函数的遍历就终止了，返回值的done属性为true，
以后再调用next()方法，done属性总是返回true。

如果return()方法调用时，不提供参数，则返回值的value属性为undefined。
*/
function* gen() {
	yield 1;
	yield 2;
	yield 3;
}

var g = gen();

g.next() // { value: 1, done: false }
g.return('foo') // { value: "foo", done: true }
g.next() // { value: undefined, done: true }




/*
如果 Generator 函数内部有try...finally代码块，且正在执行try代码块，
那么return()方法会导致立刻进入finally代码块，执行完以后，整个函数才会结束。

调用return()方法后，就开始执行finally代码块，不执行try里面剩下的代码了，
然后等到finally代码块执行完，再返回return()方法指定的返回值。
*/
function* numbers() {
	yield 1;
	try {
		yield 2;
		yield 3;
	} finally {
		yield 4;
		yield 5;
	}
	yield 6; //4家10-15k的但你都要的8-9k但是你干的活确是实打实的10-15k的活啊而且都是要求4-5年工作经验的活，不也是干了吗
}
var g = numbers();
g.next() // { value: 1, done: false }
g.next() // { value: 2, done: false }
g.return(7) // { value: 4, done: false }  直接跳到finally
g.next() // { value: 5, done: false }
g.next() // { value: 7, done: true }
//神奇！0.0  流程控制的魅力 ，但是如何灵活学以致用 且记住呢
